// 授权登陆中间件

// 主要为了验证token
// 白名单？（为什么需要这个？因为有的接口，不需要token）
// 白客/黑客
const jwt = require('jsonwebtoken')
const { secretKey } = require('../utils/config')
const whiteList = [
  '/users/login',
  '/users/register',
  '/users/code',
  // '/users/list',
  '/blogs/codeList',
  '/users/get-test',
]
module.exports = () => {
  return async (ctx, next) => {
    console.log('auth授权登陆中间件---------------')
    // 1. 拿到token
    // 2. 使用jsonwebtoken 验证
    // 3. 验证通过/不通过
    if (whiteList.includes(ctx.path)) {
      // 如果当前在白名单中，直接往下走
      await next()
    } else {
      // 如果不在白名单中，就需要验证token
      const { token } = ctx.request.headers
      try {
        const resToken = jwt.verify(token, secretKey)
        console.log('auth:rest:', resToken)

        // 解析完了之后，拿到了用户身份，能干什么？拿到身份之后，就可以基于身份做不同的数据筛选
        // RBAC 用户身份权限模型
        // 解析完token之后，将当前数据存储在一个地方
        ctx.state.userInfo = resToken
        await next()
      } catch (err) {
        ctx.body = { code: -1, err }
      }
    }
  }
}
